package chapter08.s02threaddispatch;

/**
 * 线程的调度
 *   分时调度模型: 所有的线程轮流获得CPU的使用权
 *   抢占式调度模型: 优先级高的线程优先占用CPU java默认
 *
 * 线程的优先级
 *   优先级越高的线程获得CPU执行的机会越大
 *   优先级越低的线程获得CPU执行的机会越小。
 *
 *   Thread.MIN_PRIORITY 1
 *   Thread.MAX_PRIORITY 10
 *   Thread.NORM_PRIORITY 5
 *
 * 不同优先级的线程运行情况:优先级越高的线程,获取CPU切换时间片的机率越大
 *
 */

// 定义类MaxPriority实现Runnable接口
class MaxPriority implements Runnable {
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(Thread.currentThread().getName() + "正在输出：" + i);
        }
    }
}

// 定义类MinPriority实现Runnable接口
class MinPriority implements Runnable {
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(Thread.currentThread().getName() + "正在输出：" + i);
        }
    }
}

public class Example06 {
    public static void main(String[] args) {
        // 创建两个线程
        Thread minPriority = new Thread(new MinPriority(), "优先级较低的线程");
        Thread maxPriority = new Thread(new MaxPriority(), "优先级较高的线程");
        minPriority.setPriority(Thread.MIN_PRIORITY); // 设置线程的优先级为1
        maxPriority.setPriority(Thread.MAX_PRIORITY); // 设置线程的优先级为10
        // 开启两个线程
        maxPriority.start();
        minPriority.start();
    }
}
